RTT 中外设作为设备存在,在建立工程的时候,ART-Pi串口4被作为系统调试串口,假如现在有一个串口模块需要和单片机通讯,则可以再初始化一个串口。如果没有驱动,那么第一步就需要写驱动,针对ART-Pi,已经有4个写好的UART驱动设备,只需要打开相应的设备即可,ART-Pi扩展引脚有UART1,因此这里使用UART1,本文给出两种使用方式。
6.1手动添加串口设备
在目前的RTT版本中,可以通过定义board.h中相关的宏定义来添加串口设备。添加一个串口设备需要以下几个步骤:
在 board.h 中已经添加了UART1的引脚定义宏,代码如下:
在 rtconfig.h 中打开UART1设备即可,添加代码如下:
#define BSP_USING_UART1
在applications新建task.c和task.h文件。
[task.c]
/**
******************************************************************************
* @file task.c
* @author BruceOu
* @lib version HAL
* @version V1.0
* @date 2021-02-27
* @blog https://blog.bruceou.cn/
* @Official Accounts 嵌入式实验楼
* @brief RTT任务
******************************************************************************
*/
/*Includes**********************************************************************/
#include "task.h"
#define THREAD_PRIORITY 2
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5
static rt_thread_t tid1 = RT_NULL;
#define SAMPLE_UART_NAME "uart1" /* 串口设备名称 */
static rt_device_t serial; /* 串口设备句柄 */
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; /* 初始化配置参数 */
/* 线程 的入口函数 */
static void thread_entry(void *parameter)
{
rt_uint32_t count = 1;
char str[] = "hello RT-Thread!\r\n";
/* step1:查找串口设备 */
serial = rt_device_find(SAMPLE_UART_NAME);
/* step2:修改串口配置参数 */
config.baud_rate = BAUD_RATE_9600; //修改波特率为 9600
config.data_bits = DATA_BITS_8; //数据位 8
config.stop_bits = STOP_BITS_1; //停止位 1
config.bufsz = 128; //修改缓冲区 buff size 为 128
config.parity = PARITY_NONE; //无奇偶校验位
/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
while (count++)
{
if(count == 5000)
{
count = 1;
}
rt_thread_mdelay(2000);
/* 发送字符串 */
rt_device_write(serial, 0, str, (sizeof(str) - 1));
}
}
/* 线程 */
int thread_serial(void)
{
/* 创建线程 ,名称是 thread,入口是 thread_entry*/
tid1 = rt_thread_create("thread",
thread_entry, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE);
/* 如果获得线程控制块,启动这个线程 */
if (tid1 != RT_NULL)
rt_thread_startup(tid1);
return 0;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(thread_serial, thread serial);
[task.h]
#ifndef _TASK_H_
#define _TASK_H_
#include <rtthread.h>
#include "rtconfig.h"
#include <rtdevice.h>
#include "drv_common.h"
int thread_serial(void);
#endif
编译,下载。在finish中终端使能thread_serial:
使用串口调试助手即可查看uart1的输出信息。
6.2使用Env工具添加串口设备
进入工程环境,打开env控制台,输入 menuconfig 命令后即可打开其界面。依次进入以下选项:
→ Hardware Drivers Config → On-chip Peripheral → Enable UART
使能UART1,保存退出即可。
和自动添加串口设备一样,添加相应的应用程序。也就是task.c的内容。
目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译:
编译成功:
如果编译没有问题,现象和手动添加的一样。
如果使用 mdk/iar 来进行项目开发,可以直接使用ART-Pi 中的工程文件或者使用以下命令中的其中一种,重新生成工程,再进行编译下载。
打开工程,在 rtconfig.h 中则会自动添加UART1的宏定义:
代码获取方法
1.长按下面二维码,关注公众号[嵌入式实验楼]
2.在公众号回复关键词[Art-Pi]获取资料